home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / cmds / dviselect / types.h < prev    next >
Encoding:
C/C++ Source or Header  |  1989-06-16  |  1.2 KB  |  44 lines

  1. /*
  2.  * Copyright (c) 1987 University of Maryland Department of Computer Science.
  3.  * All rights reserved.  Permission to copy for any purpose is hereby granted
  4.  * so long as this copyright notice remains intact.
  5.  */
  6.  
  7. /*
  8.  * C-TeX types (system dependent).
  9.  */
  10.  
  11. #ifndef _CTEX_TYPES_
  12. #define _CTEX_TYPES_
  13.  
  14. /* a 16 bit integer (signed) */
  15. typedef short i16;
  16.  
  17. /* a 32 bit integer (signed) */
  18. typedef long i32;
  19.  
  20. /* macros to sign extend quantities that are less than 32 bits long */
  21. #if defined(u3b) || defined(u3b2) || defined(u3b5) || defined(ibm03)
  22. #define Sign8(n)    ((n) & (1 << 7) ? ((n) | 0xffffff00) : (n))
  23. #define Sign16(n)    ((i32) (short) (n))
  24. #define Sign24(n)    ((n) & (1 << 23) ? ((n) | 0xff000000) : (n))
  25. #else
  26. #ifdef sun
  27. /* Sun mishandles (int)(char)(constant), but this subterfuge works: */
  28. #define Sign8(n)    ((i32) (char) (int) (n))
  29. #else
  30. #define Sign8(n)    ((i32) (char) (n))
  31. #endif /* sun */
  32. #define Sign16(n)    ((i32) (short) (n))
  33. #define Sign24(n)    (((n) << 8) >> 8)
  34. #endif /* u3b || u3b2 || u3b5 */
  35.  
  36. /* macros to truncate quantites that are signed but shouldn't be */
  37. #define UnSign8(n)    ((n) & 0xff)
  38. #define UnSign16(n)    ((n) & 0xffff)
  39. #define UnSign24(n)    ((n) & 0xffffff)
  40.  
  41. /* note that we never have unsigned 32 bit integers */
  42.  
  43. #endif /* _CTEX_TYPES_ */
  44.